P1163 银行贷款 - 洛谷

P1163 银行贷款 - 洛谷

银行贷款

题目描述

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入格式

三个用空格隔开的正整数。

第一个整数表示贷款的原值 w0,第二个整数表示每月支付的分期付款金额 w,第三个整数表示分期付款还清贷款所需的总月数 m

输出格式

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 0.1%

数据保证答案不超过 300.0%

样例 #1

样例输入 #1

1000 100 12

样例输出 #1

2.9

提示

数据保证,1w0,w23111m3000

bool check(double mid)
{
    double sumt = w0;
    for (int i = 1; i <= m; i++)
        sumt = sumt + sumt * mid - w;
    if (sumt > 0)
        return true;
    return false;
}

可以将 check 省略这样写:

#include <bits/stdc++.h>
using namespace std;
double w, w0, m, l, r, sum;
int main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr);
    cin >> w0 >> w >> m;
    l = 0,r = 300;
    while (r-l > 1e-5)
    {
        bool ok = false;
        double mid = (l + r) / 2,sumt = w0;
        for (int i = 1; i <= m; i++)
            sumt = sumt + sumt * mid - w;
        if (sumt > 0)  ok = true;
        if (ok)  r = mid;
        else     l = mid;
    }
    cout << setprecision(1) << fixed << l*100 << '\n';
}